package com.it.config;

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 配置拦截器
 * 实现接口 HandlerInterceptor 并实现 preHandle、postHandle、afterCompletion方法
 */
@Component
public class SpringMvcIntercept implements HandlerInterceptor {
    /**
     * 【说明】：在执行拦截之前调用的方法
     * 【作用】：编码格式设置、 登录保护 权限处理
     * @param request   请求对象
     * @param response  响应对象
     * @param handler   要调用的方法对象
     * @return true 放行 false 拦截
     * @throws Exception
     */
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("request" + request + " response" + response + " handler" + handler);
        return true;
    }

    /**
     * 【说明】：当handler处理完毕后，处理的方法、没有拦截机制、
     *         当preHandle方法返回值为true时才会执行
     * 【作用】：对结果的处理，敏感词汇检查
     * @param request       请求对象
     * @param response      响应对象
     * @param handler       handler方法
     * @param modelAndView  返回的视图和共享域数据
     * @throws Exception
     */
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("postHandle：");
    }

    /**
     * 【说明】：整体护理完毕会调用该方法、也没有拦截机制
     * 【作用】：
     * @param request  请求对象
     * @param response 响应对象
     * @param handler  handler方法
     * @param ex       如果handler对象保存，的异常对象
     * @throws Exception
     */
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("afterCompletion：");
    }
}
